# 作业一、用类封装一个Math类
class MyMath:
    def __init__(self, num1: float, num2: float):
        self.num1 = num1
        self.num2 = num2

    # 加
    def add(self):
        return self.num1 + self.num2

    # 减
    def sub(self):
        return self.num1 - self.num2

    # 乘
    def mul(self):
        return self.num1 * self.num2

    # 除（Float Division）
    def float_div(self):
        try:
            return self.num1 / self.num2
        except ZeroDivisionError:
            print('不能用 0 做除数！！！')

    # 地板除（Floor Division）
    def floor_div(self):
        try:
            return self.num1 // self.num2
        except ZeroDivisionError:
            print('不能用 0 做除数！！！')

    # 取余（Modulus）
    def mod(self):
        return self.num1 % self.num2

    # 乘方（Power）
    def power(self):
        return self.num1 ** self.num2

    # 开方（Square root），平方根
    def my_sqrt(self):
        from math import sqrt
        try:
            return sqrt(self.num1)
        except ValueError:
            print('输入不合法，开平方操作只能针对正数哦！！！')

    def calculate(self, operate: str):
        func_dict = {'+': self.add, '-': self.sub, '*': self.mul, '/': self.float_div, '//': self.floor_div,
                     '%': self.mod, '**': self.power, 'sqrt': self.my_sqrt}
        if operate == 'sqrt':
            return self.my_sqrt()
        return func_dict[operate]()


# 作业二、自由课题, 按照自己的想法, 将身边的事物抽象成类, 并创建多个实例
class Animal:
    def __init__(self, name):
        self.name = name

    def say(self):
        pass

    def eat(self):
        print(f'{self.name}开始吃东西')


class Ox(Animal):
    def __init__(self):
        super().__init__('牛')

    def say(self):
        print(f'{self.name}叫声：哞哞')


class Dog(Animal):
    def __init__(self):
        super().__init__('狗')

    def say(self):
        print(f'{self.name}叫声：汪汪')


if __name__ == '__main__':
    mymath = MyMath(10, 3)
    print(mymath.calculate('+'))
    print(mymath.calculate('-'))
    print(mymath.calculate('*'))
    print(mymath.calculate('/'))
    print(mymath.calculate('//'))
    print(mymath.calculate('%'))
    print(mymath.calculate('**'))
    print(mymath.calculate('sqrt'))
    # 创建多个 Animal 的子类实例
    ox = Ox()
    dog = Dog()
    print(ox.name)
    print(dog.name)
    ox.say()
    dog.say()
    ox.eat()
    dog.eat()
